package com.laamella.syntherface.synths;

import java.util.Arrays;
import java.util.List;

import javax.swing.JPanel;

import com.laamella.syntherface.synths.midi.MidiInterface;

/**
 * Interface to all the synthesizers available. Please register every synthesizer
 * implementation here.
 */
public abstract class Syntherface {

	/**
	 * A synthesizer implementation should initialize its interface here. A
	 * {@link JPanel} with arbitrary contents must be constructed and
	 * returned.
	 * 
	 * @param midiInterface
	 *                gives access to the actual hardware synthesizer
	 * @return a newly created panel with the synthesizer user interface
	 */
	public abstract JPanel constructSyntherface(MidiInterface midiInterface);

	/**
	 * @return The real name of the synthesizer.
	 */
	public abstract String getSynthName();

	/**
	 * @return The company or person that made the synthesizer.
	 */
	public abstract String getSynthCreator();

	/**
	 * @return a description of the user interface, what its purpose is,
	 *         etc.
	 */
	public abstract String getInterfaceDescription();

	/**
	 * @return who made this interface, and any other comments that don't
	 *         belong anywhere else.
	 */
	public abstract String getComments();

	public abstract void receivePatch() throws Exception;

	/**
	 * Called when "Help/Synthesizer" is chosen from the menu. Show a window
	 * or panel, or go to a URL or something.
	 */
	public abstract void help();

}
